﻿#ifndef CAN_B70D0570_7C8E_420A_8F22_94C2004A8919
#define CAN_B70D0570_7C8E_420A_8F22_94C2004A8919

#ifdef  __cplusplus
extern "C" {
#endif

#include <stdint.h>


#define CAN_EXTEND_FLAG  0x80000000U
#define CAN_EXTEND_MASK  0x1FFFFFFFU

struct canmsg_filter {
	uint32_t can_id;
	uint32_t can_mask;
};

struct can_handle {
	int socket;
	char dev_name[32];
};



/*************************************************************************************//**
*\n 函数名称： netcan_open()
*\n 功能描述：
*\n            open CAN接口
*\n 输入参数：
*\n            const char *dev  : 	设备名字符串,"can0" or "can1"
*\n            int bitrate		: 	波特率， 单位为Bps
*\n            int filter_num   : 	滤波表项个数(0~64)
*\n            struct canmsg_filter *filter_tab :  滤波表(可以为NULL)
*\n 输出参数:
*\n
*\n 返 回 值:
*\n           can句柄; NULL 失败
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01 罗先能        2021.4.7     创建
*****************************************************************************************/
struct  can_handle* netcan_open(const char *dev, int bitrate,
						int filter_num, struct canmsg_filter *filter_tab);

/*************************************************************************************//**
*\n 函数名称： netcan_close()
*\n 功能描述：
*\n            关闭can接口
*\n 输入参数：
*\n            struct can_handle *handle : can句柄
*\n 输出参数:
*\n
*\n 返 回 值:
*\n           0 成功; -1 失败; -n     错误码
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01 罗先能        2021.4.7     创建
*****************************************************************************************/
int netcan_close(struct can_handle *handle);


/*************************************************************************************//**
*\n 函数名称： netcan_write()
*\n 功能描述：
*\n            发送can报文
*\n 输入参数：
*\n            struct can_handle *handle : can句柄
*\n            unsigned int id			 : can id (扩展帧 + CAN_EXTEND_FLAG)
*\n            unsigned char *data       : 发送数据buffer
*\n            unsigned int bytes        : 数据个数byte单位, (1 ~ 8)bytes
*\n 输出参数:
*\n
*\n 返 回 值:
*\n           bytes 成功; -1 失败;
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01 罗先能        2021.4.7     创建
*****************************************************************************************/
int netcan_write(struct can_handle *handle, unsigned int id, unsigned char *data,unsigned int bytes);

/*************************************************************************************//**
*\n 函数名称： netcan_read()
*\n 功能描述：
*\n            读取can报文
*\n 输入参数：
*\n            struct can_handle *handle : can句柄
*\n
*\n 输出参数:
*\n            unsigned int *id			 : can id
*\n            unsigned char *data       : 数据buffer
*\n            unsigned char *bytes       : 数据个数 （可以为NULL）
*\n
*\n 返 回 值:
*\n           数据个数; -1 失败; -n 错误码
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01  罗先能        2021.4.8        创建
*****************************************************************************************/
int netcan_read(struct can_handle *handle, unsigned int* id, unsigned char *data,unsigned char* bytes);

#ifdef  __cplusplus
}
#endif

#endif
